package 大数相加;

public class Test
{
    private static String calculate(String str) {
        String data="";//data用来存放最后计算的结果
        String[] split = str.split("\\+");//按照+号将字符串分隔
        if(split.length!=2){
            System.out.println("输入有误");
            return "输入有误 ，无返回值";
        }
        int index1=split[0].length()-1;//存第一个数组里面字符串的长度
        int index2=split[1].length()-1;//存第二个数组里面字符串的长度
        String str1=split[0];//将字符串拿出来转换为字符数组
        char[] charArray1 = str1.toCharArray();
        String str2=split[1];
        char[] charArray2 = str2.toCharArray();
        /**
         * 始终让第一个字符串的长度大于等于第二个字符串
         */
        if(index1<index2){
            int temp=index1;
            index1=index2;
            index2=temp;

            char [] aa=charArray1;
            charArray1=charArray2;
            charArray2=aa;
        }
        int left=0;//这个标记用于向上进位，初始值为0
        while(index2>=0){
            int sum=0;//末尾两个数相加
            int a1=(int)(charArray1[index2]-'0');//将字符转换为数值
            int a2=(int)(charArray2[index2]-'0');
            sum=a1+a2+left;//将两个数相加，并加上进位
            if(sum>=10)//向上进位
            {
                left=1;
            }
            else{
                left=0;//不进位
            }
            /**
             * 将每次计算得到的结果放到data的前面
             */
            String temp=(sum%10)+data;
            data=temp;
            index2--;
            index1--;
        }
        /**
         * 继续计算较长那个串的值
         */
        while(index1>=0){
            int sum=0;
            int a1=(int)(charArray1[index1]-'0');
            sum=a1+left;
            if(sum>=10)
            {
                left=1;
            }
            else{
                left=0;
            }
            String temp1=(sum%10)+data;
            data=temp1;
            index1--;
        }

        /**
         * 将最长的计算了之后，还需要把大于0的进位符加在结果的前面
         */
        if(left>0){
            String temp1=left+data;
            data=temp1;
        }
        return data;
    }
    public static void main(String[] args) {
        String string="99999999999999999999+1111111111111111111111111111111111111";
        System.out.println(calculate(string));

        String
                string1="22222222222222222222123222222222222222+11111112331231211111111111111";
        System.out.println(calculate(string1));
    }
}
